package com.chenl.provider.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 一个WiFi管理类，用于获取WiFi的信息，用于通信
 *
 * @author blademaster
 *
 */
public class WiFiManager {
    public static boolean isWiFiConnected=false;
    public static String myIP=null;//本机的WiFi ip
    public static String connecterIP=null;//本机连接的路由的IP
    public static String connecterMAC=null;//本机连接的路由的MAC
    public static boolean isConnecterHDCP=false;//本机连接的路由是否为HDCP动态

    public WiFiManager() {

    }

    public static String getWifiIp(){
        //******************由"ipconfig"获取myIP*********************
        String str= command("ipconfig");

        //获取“无线局域网适配器 WLAN”段
        String WLAN_str=null;
        Pattern pattern = Pattern.compile("无线局域网适配器 WLAN:\r\n\r\n[\\s\\S]*?\r\n\r\n");//设置正则表达形式，[\\s\\S]*?为任意数量字符非贪婪正则表达式
        Matcher matcher = pattern.matcher(str);//对str进行正则表达式搜索
        if(matcher.find()){
            int start = matcher.start();
            int end = matcher.end();
            WLAN_str=str.substring(start,end);
        }
        if(WLAN_str==null) {
            return null;
        }

        //获取myIP
        pattern = Pattern.compile("IPv4 地址 . . . . . . . . . . . . : ");//设置正则表达形式，[\\s\\S]*?为任意数量字符非贪婪正则表达式
        matcher = pattern.matcher(WLAN_str);//对str进行正则表达式搜索
        if(matcher.find()){
            int end = matcher.end();
            myIP=WLAN_str.substring(end).split("\r\n")[0];//首先截取匹配到的字符串，然后读到回车，获取ip地址
            isWiFiConnected=true;
        }
        else {
            isWiFiConnected=false;
            return null;
        }

        //当WiFi连接时
        //******************由"ARP -a"获取connecterIP*********************
        str= command("ARP -a");

        //获取connecterIP
        pattern = Pattern.compile("接口: "+myIP+"[\\s\\S]*?类型\r\n");//设置正则表达形式，[\\s\\S]*?为任意数量字符非贪婪正则表达式
        matcher = pattern.matcher(str);//对str进行正则表达式搜索
        if(matcher.find()){
            int end = matcher.end();
            String connecter_str=str.substring(end).split("\r\n")[0];//首先截取匹配到的字符串，然后读到回车，获取ip地址
            connecterIP=connecter_str.split("\\s+")[1];//"\\s+"为多个空格的正则表达式
            connecterMAC=connecter_str.split("\\s+")[2];
            isConnecterHDCP=connecter_str.split("\\s+")[3].equals("动态") ? true : false;
        }
        return myIP;
    }


    /**
     * 获取正在连接的WiFi的名称（SSID）
     * @return
     */
    public static String getConnectingWiFiSSID() {
        String str= command("netsh wlan show interfaces");
        Pattern pattern = Pattern.compile("SSID[\\s\\S]*?: ");//设置正则表达形式，[\\s\\S]*?为任意数量字符非贪婪正则表达式
        Matcher matcher = pattern.matcher(str);//对str进行正则表达式搜索
        if(matcher.find()){
            int end = matcher.end();
            String SSID=str.substring(end).split("\r\n")[0];//首先截取匹配到的字符串，然后读到回车，获取ip地址
            return SSID;
        }
        return null;
    }

    public static String command(String cmd){//获取cmd输出
        try {
            Process process = Runtime.getRuntime().exec(cmd);

            //关闭流释放资源
            if(process != null){
                process.getOutputStream().close();
            }
            BufferedReader br =
                    new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName("GBK")));

            StringBuilder result = new StringBuilder();
            String tmp = null;
            while ((tmp = br.readLine()) != null) {
                result.append(tmp+"\r\n");//将tmp内容附加（append）到StringBuilder类中
            }
            return result.toString();

        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
            return null;
        }
    }

}